#include <bits/stdc++.h>
using namespace std;
//0 1 2
//1
//0 1 2 3 4 5 6 7 8 9 10
//1 3 5 7 9
//3 7
//7
//每次删除的数都是2^n-1
//https://www.nowcoder.com/practice/196141ecd6eb401da3111748d30e9141?tpId=128&tqId=33775&ru=/exam/oj
// int main() 
// {
//    int n,temp=0,i=0;
//    while(cin>>n)
//    {
//     temp=0,i=0;
//     while(temp<n)
//     {
//         if((temp*2-1)>n)break;
//         temp=pow(2,i++)-1;
//     }
//     cout<<temp<<endl;
//    }
//    return 0;
// }

//https://www.nowcoder.com/questionTerminal/af6d52eb400b40fd9652b089216f113e
// int n,m;
// void dfs(vector<int>&ret,vector<bool>&vis,vector<int>&output,int sum,int start)
// {
//     if(sum==m)
//     {
//         for(int i=0;i<output.size();i++)cout<<output[i]<<" ";
//         cout<<endl;
//         return;
//     }
//     if(sum>m)return;
//     for(int i=start;i<n;i++)
//     {
//         if(vis[i])continue;
//         output.push_back(ret[i]);
//         vis[i]=true;
//         dfs(ret,vis,output,sum+ret[i],i+1);
//         vis[i]=false;
//         output.pop_back();
//     }
// }
// int main()
// {
//     cin>>n>>m;
//     vector<int> ret(n);
//     vector<bool> vis(n,0);
//     vector<int> output;
//     for(int i=0;i<n;i++)ret[i]=i+1;
//     dfs(ret,vis,output,0,0);
//     return 0;
// }

//明天早晨把这道题的题解写了然后再push
//https://www.nowcoder.com/practice/3959837097c7413a961a135d7104c314?tpId=37&tqId=21275&ru=/exam/oj
int minLen(string s1,string s2)
{
    int n=s1.size(),m=s2.size();
    //dp[i][j]表示s1的0到i和s2的0到j的最小操作次数
    vector<vector<int>> dp(n+1,vector<int>(m+1,0));
    for(int i=0;i<=n;i++)dp[i][0]=i;
    for(int i=0;i<=m;i++)dp[0][i]=i;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(s1[i-1]==s2[j-1])dp[i][j]=dp[i-1][j-1];
            else dp[i][j]=min(dp[i][j-1],min(dp[i-1][j-1],dp[i-1][j]))+1;
        }
    }
    return dp[n][m];
}
int main()
{
    string s1,s2;cin>>s1>>s2;
    cout<<minLen(s1,s2)<<endl;
    return 0;
}